home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue66 / XMLXSLT / MSXML / Unit1.pas < prev   
Encoding:
Pascal/Delphi Source File  |  2000-12-13  |  5.0 KB  |  196 lines

  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   OleCtrls, SHDocVw, StdCtrls, Grids, DBGrids, Db, DBTables, ComCtrls,
  8.   MSXML2_TLB, ExtCtrls;
  9.  
  10. type
  11.   TForm1 = class(TForm)
  12.     dsEmployee: TDataSource;
  13.     tblEmployee: TTable;
  14.     tblEmployeeEmpNo: TIntegerField;
  15.     tblEmployeeLastName: TStringField;
  16.     tblEmployeeFirstName: TStringField;
  17.     tblEmployeePhoneExt: TStringField;
  18.     tblEmployeeHireDate: TDateTimeField;
  19.     tblEmployeeSalary: TFloatField;
  20.     PageControl1: TPageControl;
  21.     TabSheet1: TTabSheet;
  22.     TabSheet3: TTabSheet;
  23.     Label3: TLabel;
  24.     wbXML: TWebBrowser;
  25.     btnConvert: TButton;
  26.     TabSheet5: TTabSheet;
  27.     edtPattern: TEdit;
  28.     btnApply: TButton;
  29.     rgPattern: TRadioGroup;
  30.     mResults: TMemo;
  31.     lblCount: TLabel;
  32.     Label5: TLabel;
  33.     mXML: TMemo;
  34.     Label1: TLabel;
  35.     Label6: TLabel;
  36.     TabSheet2: TTabSheet;
  37.     Transform: TButton;
  38.     memoTransform: TMemo;
  39.     Panel1: TPanel;
  40.     wbMSXML: TWebBrowser;
  41.     procedure btnConvertClick(Sender: TObject);
  42.     procedure btnOpenClick(Sender: TObject);
  43.     procedure FormCreate(Sender: TObject);
  44.     procedure btnApplyClick(Sender: TObject);
  45.     procedure rgPatternClick(Sender: TObject);
  46.     procedure TransformClick(Sender: TObject);
  47.   private
  48.     { Private declarations }
  49.   public
  50.     { Public declarations }
  51.   end;
  52.  
  53. var
  54.   Form1       : TForm1;
  55.   g_AppPath   : String;
  56.   g_xmlCBCV   : IXMLDOMDocument;
  57.   g_xmlDoc    : IXMLDOMDocument;
  58.   g_xmlResult : IXMLDOMNode;
  59.  
  60. implementation
  61.  
  62. {$R *.DFM}
  63.  
  64. (* ************************************************************************** *)
  65.  
  66. procedure TForm1.btnConvertClick(Sender: TObject);
  67. var f : TextFile;
  68.     i : Integer;
  69.  
  70. begin
  71.       tblEmployee.Active:=True;
  72.  
  73.       i := 0;
  74.  
  75.       AssignFile(f, g_AppPath + '\employees.xml');
  76.       Rewrite(f);
  77.       writeln(f, '<?xml version="1.0"?>');
  78.  
  79.       writeln(f, '<employees>');
  80.       writeln(f, '');
  81.  
  82.       with tblEmployee do begin
  83.         First;
  84.         DisableControls;
  85.         while not eof do begin
  86.           write(f, '<employee emp_no="');
  87.           write(f, FieldByName('EMPNO').AsString);
  88.           writeln(f, '">');
  89.  
  90.           write(f, '<emp_lastname>');
  91.           write(f, FieldByName('LASTNAME').AsString);
  92.           write(f, '</emp_lastname>');
  93.  
  94.           write(f, '<emp_firstname>');
  95.           write(f, FieldByName('FIRSTNAME').AsString);
  96.           write(f, '</emp_firstname>');
  97.  
  98.           write(f, '<emp_phoneext>');
  99.           write(f, FieldByName('PHONEEXT').AsString);
  100.           write(f, '</emp_phoneext>');
  101.  
  102.           // For every other employee, alternate the currency...
  103.           // ..for the sake of demonstration...
  104.           if i mod 2 = 0 then
  105.             write(f, '<emp_salary currency="UKP">')
  106.           else
  107.             write(f, '<emp_salary currency="USD">');
  108.  
  109.           write(f, FieldByName('Salary').AsString);
  110.           writeln(f, '</emp_salary>');
  111.  
  112.           writeln(f, '</employee>');
  113.           writeln(f, '');
  114.           next;
  115.           i:=i+1;
  116.         end;
  117.         EnableControls;
  118.       end;
  119.  
  120.       writeln(f, '</employees>');
  121.       CloseFile(f);
  122.  
  123.       mXML.Lines.LoadFromFile(g_AppPath + 'employees.xml');
  124.       wbXML.Navigate(g_AppPath + 'employees.xml');
  125.  
  126.       g_xmlDoc.LoadXML(mXML.Text);
  127.  
  128.       tblEmployee.Active:=False;
  129. end;
  130.  
  131. (* ************************************************************************** *)
  132.  
  133. procedure TForm1.btnOpenClick(Sender: TObject);
  134. begin
  135.   btnConvert.Enabled:=tblEmployee.Active;
  136. end;
  137.  
  138. (* ************************************************************************** *)
  139.  
  140. procedure TForm1.FormCreate(Sender: TObject);
  141. begin
  142.     g_xmlDoc := CoDOMDocument.Create;
  143. end;
  144.  
  145. (* ************************************************************************** *)
  146.  
  147. procedure TForm1.btnApplyClick(Sender: TObject);
  148. var
  149.   xmlResult : IXMLDOMNodeList;
  150.   i : Integer;
  151. begin
  152.     XMLResult:=g_xmlDoc.selectNodes (edtPattern.Text);
  153.  
  154.     mResults.Text:='';
  155.  
  156.     lblCount.Caption:= IntToStr(XMLResult.Length) + ' item(s) returned';
  157.  
  158.     for i:=0 to XMLResult.Length-1 do
  159.     begin
  160.       mResults.Lines.Add(XMLResult.Item[i].XML);
  161.     end;
  162. end;
  163.  
  164. (* ************************************************************************** *)
  165.  
  166. procedure TForm1.rgPatternClick(Sender: TObject);
  167. begin
  168.     edtPattern.Text:=rgPattern.Items[rgPattern.ItemIndex];
  169.     btnApplyClick(Sender);
  170. end;
  171.  
  172. (* ************************************************************************** *)
  173.  
  174. procedure TForm1.TransformClick(Sender: TObject);
  175. var xmlEmployees,
  176.     xslStyle : IXMLDOMDocument;
  177.  
  178. begin
  179.     xmlEmployees := CoDOMDocument.Create;
  180.     xslStyle     := CoDOMDocument.Create;
  181.  
  182.     xmlEmployees.load('employees.xml');
  183.     xslStyle.load('empuksna.xsl');
  184.  
  185.     memoTransform.Text := xmlEmployees.transformNode(xslStyle);
  186.     memoTransform.Lines.SaveToFile('msxml.htm');
  187.  
  188.     wbMSXML.Navigate(g_AppPath+'msxml.htm');
  189. end;
  190.  
  191. initialization
  192.      g_AppPath:=ExtractFilePath(Application.ExeName);
  193.  
  194.  
  195. end.
  196.